package day2_linkedlist.leetcode;

/**
 * @Author: yuisama
 * @Date: 2021/8/24 20:29
 * @Description:反转单链表
 * 给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
 */


public class Num206_reverseList {
    // 方法1，新建一条新链表，边遍历原链表边头插法插入新链表。得到的新链表即为所求
//    public ListNode reverseList(ListNode head) {
//        // 链表为空或者只有一个节点
//        if (head == null || head.next == null) {
//            return head;
//        }else {
//            // 虚拟头结点
//            ListNode firstNode = new ListNode(head.val,null);
//            ListNode dummyHead = new ListNode(0,firstNode);
//            while (head.next != null) {
//                ListNode tempNode = new ListNode(head.next.val,dummyHead.next);
//                dummyHead.next = tempNode;
//                head = head.next;
//            }
//            return dummyHead.next;
//        }
//    }

    // 方法2，递归法
    // 此方法的语义为反转一个给定链表
//    public ListNode reverseList(ListNode head) {
//        // 终止条件,若此时链表只有一个节点或者为空，直接返回head即可
//        if (head == null || head.next == null) {
//            return head;
//        }
//        ListNode temp = head.next;
//        // 反转剩下的链表
//        ListNode newListHead = reverseList(head.next);
//        temp.next = head;
//        head.next = null;
//        return newListHead;
//    }

    // 方法3，虚拟头结点，原地指针移动
    public ListNode reverseList(ListNode head) {
        return null;
    }


}
